{
  description = "DevShell for Deep Learning Chess, using Rust 1.75";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = {
    nixpkgs,
    rust-overlay,
    flake-utils,
    ...
  }:
    flake-utils.lib.eachDefaultSystem (
      system: let
        overlays = [
          (final: prev: {
            rust-bin = rust-overlay.lib.mkRustBin {distRoot = "https://rsproxy.cn/dist";} prev;
          })
        ];
        pkgs = import nixpkgs {
          inherit system overlays;
        };
      in {
        devShells.default = with pkgs;
          mkShell {
            buildInputs = [
              openssl
              pkg-config
              eza
              fd
              ripgrep
              # Rust
              rust-bin.stable."1.75.0".complete
              # Python with packages
              (python3.withPackages (ps:
                with ps; [
                  pip
                  setuptools
                  numpy
                  pygame
                  tkinter
                ]))
              turtle
            ];

            shellHook = ''
              alias ls=eza
              alias find=fd
            '';
          };
      }
    );
}
